import { isObject } from "@vueuse/core";

/**
 * 数据中有字段为空的处理, 字段为空都改为'--'
 */
export const formatData = (initialData: any): any => {
  const isEmpty = (val: any): string => {
    // null、字符串为空（注意存在数值为0时），带空格字符串，后台处理成的'-'
    if (!String(val) || String(val) === "null" || null == val || !String(val).replace(/\s+/g, "")) {
      return "";
    }
    return val;
  };

  if (Array.isArray(initialData)) {
    // 当数据为数组时
    initialData.forEach((val, index) => {
      initialData[index] = formatData(val);
    });
  } else if (isObject(initialData)) {
    // 当数据为对象时
    Object.keys(initialData).forEach(key => {
      initialData[key] = formatData(initialData[key]);
    });
  } else {
    // 当数据为基础类型时
    initialData = isEmpty(initialData);
  }
  return initialData;
};

/**
 * 深拷贝
 */
export const deepClone = (obj: any) => {
  return JSON.parse(JSON.stringify(obj));
};
/**
 * @description 递归转换数据结构
 * @param {Array} data 数据
 * @param {Object} keyMap key映射
 * @returns {Array}
 */
export function transformData<T extends object>(data: any[], keyMap: any[]): T[] {
  return data.map((item: { [x: string]: any; children: any }) => {
    const transformedItem: any = {};
    for (const [oldKey, newKey] of Object.entries(keyMap)) {
      if (item[oldKey] !== undefined) {
        transformedItem[newKey] = item[oldKey];
      }
    }
    if (item.children != null) {
      transformedItem.children = transformData(item.children, keyMap);
    }
    return transformedItem;
  });
}
